TP

Recuperation des données

load("../../shiny/data_varis/dfvaris_litter.Rdata")

Forme des données

dim(dfvaris_litter) # 1340 portées
## [1] 1340   13
names(dfvaris_litter)
##  [1] "species"           "yearbirth"         "littersizebirth"  
##  [4] "littersizeweaning" "sexratiobirth"     "sexratioweaning"  
##  [7] "survlitter48h"     "survlitterweaning" "survlittersexmat" 
## [10] "agedam"            "agemaxdam"         "agesire"          
## [13] "agemaxsire"
str(dfvaris_litter) # types des variables
## 'data.frame':    1340 obs. of  13 variables:
##  $ species          : Factor w/ 2 levels "Vrubra","Vvariegata": 1 1 1 1 1 1 1 1 1 1 ...
##  $ yearbirth        : int  1991 2008 1998 1989 1994 1998 2000 2012 2003 1978 ...
##  $ littersizebirth  : num  2 2 1 2 1 1 1 1 2 3 ...
##  $ littersizeweaning: int  1 1 0 0 1 1 0 0 2 3 ...
##  $ sexratiobirth    : num  1 0 1 1 0 ...
##  $ sexratioweaning  : num  1 0 NaN NaN 0 ...
##  $ survlitter48h    : num  1 0.5 1 1 1 1 0 1 1 1 ...
##  $ survlitterweaning: num  0.5 0.5 0 0 1 1 0 0 1 1 ...
##  $ survlittersexmat : num  0.5 0.5 0 0 1 1 0 0 1 1 ...
##  $ agedam           : num  8 8 13 3 11 7 12 16 16 5 ...
##  $ agemaxdam        : num  26.6 15.7 23.8 29.7 30 ...
##  $ agesire          : num  5 9 20 4 11 6 10 16 9 10 ...
##  $ agemaxsire       : num  12.64 16.69 34.51 6.21 22.31 ...
summary(dfvaris_litter)
##        species      yearbirth    littersizebirth littersizeweaning
##  Vrubra    :378   Min.   :1973   Min.   :1.000   Min.   :0.000    
##  Vvariegata:962   1st Qu.:1990   1st Qu.:1.000   1st Qu.:1.000    
##                   Median :1998   Median :2.000   Median :1.000    
##                   Mean   :1997   Mean   :1.966   Mean   :1.383    
##                   3rd Qu.:2005   3rd Qu.:3.000   3rd Qu.:2.000    
##                   Max.   :2015   Max.   :6.000   Max.   :6.000    
##                                                                   
##  sexratiobirth    sexratioweaning  survlitter48h   survlitterweaning
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.000   Min.   :0.0000   
##  1st Qu.:0.2500   1st Qu.:0.0000   1st Qu.:1.000   1st Qu.:0.5000   
##  Median :0.5000   Median :0.5000   Median :1.000   Median :1.0000   
##  Mean   :0.5742   Mean   :0.5599   Mean   :0.841   Mean   :0.7195   
##  3rd Qu.:1.0000   3rd Qu.:1.0000   3rd Qu.:1.000   3rd Qu.:1.0000   
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.000   Max.   :1.0000   
##                   NA's   :283      NA's   :14      NA's   :14       
##  survlittersexmat     agedam         agemaxdam        agesire      
##  Min.   :0.0000   Min.   : 2.000   Min.   : 3.00   Min.   : 2.000  
##  1st Qu.:0.3333   1st Qu.: 5.000   1st Qu.:13.69   1st Qu.: 6.000  
##  Median :1.0000   Median : 8.000   Median :19.70   Median : 8.000  
##  Mean   :0.6901   Mean   : 8.515   Mean   :19.58   Mean   : 9.233  
##  3rd Qu.:1.0000   3rd Qu.:11.000   3rd Qu.:24.61   3rd Qu.:12.000  
##  Max.   :1.0000   Max.   :30.000   Max.   :44.64   Max.   :38.000  
##  NA's   :14                                                        
##    agemaxsire   
##  Min.   : 1.72  
##  1st Qu.:14.64  
##  Median :19.72  
##  Mean   :19.83  
##  3rd Qu.:24.30  
##  Max.   :52.54  
## 
length(unique(dfvaris_litter$species)) # nb d'espèces
## [1] 2
unique(dfvaris_litter$species)
## [1] Vrubra     Vvariegata
## Levels: Vrubra Vvariegata
library(dplyr)
## 
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     filter, lag
## Les objets suivants sont masqués depuis 'package:base':
## 
##     intersect, setdiff, setequal, union
sub_dfvaris_litter <- dfvaris_litter %>% dplyr::group_by(species) %>% dplyr::sample_n(100) %>% as.data.frame
# creation d'une colonne nommée PAD 
dfvaris_litter$PAD <- dfvaris_litter$agesire - dfvaris_litter$agedam
# dfvaris_litter$PAD <- dplyr::mutate(dfvaris_litter, PAD = agesire - agedam)

Il est possible d’executer cette opération sans utiliser des boucles for car R c’est un langage vectorisé.

Les fonctions

info_vect <- function(vect) {
  if(!is.vector(vect)) {
    stop("'vect' doit être un vecteur")
  }
  l <- list()
  l[[1]] <- class(vect)
  l[[2]] <- length(vect)
  l[[3]] <- summary(vect)
  l[[4]] <- sum(is.na(vect))
  
  names(l) <- c("class", "dim", "summary", "na")
  return(l)
}
survlitter48h_list <- info_vect(dfvaris_litter$survlitter48h)
info_vect_from_df <- function(df) {
  if(!is.data.frame(df)) {
    stop("'df' doit être un dataframe")
  }
  
  linfo <- list()
  for (i in 1:length(df)) {
  linfo[[i]] <- info_vect(df[, i])
  }
  
  return(linfo)
}
# dfvaris_as_list <- info_vect_from_df(dfvaris_litter)
info_vect_by_lapply <- function (df) {
  return(lapply(df, function(x) info_vect(as.vector(x))))
}
# dfvaris_as_list <- info_vect_from_df(dfvaris_litter)

Les graphiques dans R

par(pty = "s", ask = FALSE)

minlim <- min(dfvaris_litter$agedam, dfvaris_litter$agesire)
minlim <- max(dfvaris_litter$agedam, dfvaris_litter$agesire)

plot(dfvaris_litter$agesire ~ dfvaris_litter$agedam, 
     main = "Relation entre l'âge du père et l'âge de la mère chez les varis: \nles femelles les plus âgées sont généralement associée",
     xlab = "Maternal age (years)", 
     ylab = "Paternal age (years)", 
     pch = ifelse(dfvaris_litter$species == "Vrubra", 2, 1), #c(2, 1)[as.numeric(dfvaris_litter$species)],
     col = ifelse(dfvaris_litter$species == "Vrubra", "grey51", "black"),
     xlim = c(0, 40),
     ylim = c(0, 40)
     )

fit <- lm(dfvaris_litter$agesire ~ dfvaris_litter$agedam)
abline(fit, col="dark green")

# mtext("formule", side = 4)
# plot.new()
# Distribution de l'âge des mères

# Création de l'histogramme de l'âge des mères
h_agedam <- hist(dfvaris_litter$agedam, freq = FALSE, 
                 main = "Distribution de l'âge des mères",
                 xlab = "Age de la mère en années", ylab = "Densité")

# Ajout d'une courbe de densité
dens_agedam <- density(dfvaris_litter$agedam)
lines(dens_agedam)

# Ajout d'une ligne verticale ayant pour abscisse l'âge moyen des mères
abline(v = mean(dfvaris_litter$agedam), col = "red")

# Coloration de l'aire sous la courbe de densité pour les valeurs inférieures au 1er quartile
qrtle1 <- summary(dfvaris_litter$agedam)["1st Qu."]
qrtle3 <- summary(dfvaris_litter$agedam)["3rd Qu."]

polygon(c(0, dens_agedam$x[dens_agedam$x <= qrtle1]),
        c(dens_agedam$y[dens_agedam$x <= qrtle1], 0),
        col = rgb(1, 0, 0, alpha = 0.3))
polygon(c(dens_agedam$x[dens_agedam$x >= qrtle3], qrtle3),
        c(0, dens_agedam$y[dens_agedam$x >= qrtle3]),
        col = rgb(1, 0, 0, alpha = 0.3))

# Distribution de l'âge des mères et des pères en fonction de l'espèce

# Préparation d'une zone graphique à deux lignes et deux colonnes
par(mfrow = c(2, 2))

# Création d'un vecteur contenant l'âge des mères de l'espèce V. Rubra
dfagedam_vr <- dfvaris_litter$agedam[dfvaris_litter$species == "Vrubra"]
# Création de l'histogramme de l'âge des mères de l'espèce V. Rubra
hist(dfagedam_vr, freq = FALSE, main = "Distribution de l'âge des mères\nde l'espèce V. Rubra", 
     xlab = "Age de la mère", ylab = "Densité", col = "#69b3a2")
# Ajout de la courbe de densité de l'âge des mères de l'espèce V. Rubra
lines(density(dfagedam_vr))

# Création d'un vecteur contenant l'âge des mères de l'espèce V. Variegata
dfagedam_vv <- dfvaris_litter$agedam[dfvaris_litter$species == "Vvariegata"]
# Création de l'histogramme de l'âge des mères de l'espèce V. Variegata
hist(dfagedam_vv, freq = FALSE, main = "Distribution de l'âge des mères\nde l'espèce V. Variegata", 
     xlab = "Age de la mère", ylab = "", col = "#404080")
# Ajout de la courbe de densité de l'âge des mères de l'espèce V. Variegata
lines(density(dfagedam_vv))

# Création d'un vecteur contenant l'âge des pères de l'espèce V. Rubra
dfagesire_vr <- dfvaris_litter$agesire[dfvaris_litter$species == "Vrubra"]
# Création de l'histogramme de l'âge des pères de l'espèce V. Rubra
hist(dfagesire_vr, freq = FALSE, main = "Distribution de l'âge des pères\nde l'espèce V. Rubra",
     xlab = "Age du père", ylab = "Densité", col = "#69b3a2")
# Ajout de la courbe de densité de l'âge des pères de l'espèce V. Rubra
lines(density(dfagesire_vr))

ggplot2

  • Paradigme propre différent de celui de R

  • La sigle gg indique grammar of graphics

# Distribution de l'âge des mères (voir onglet A du chapitre 3.2)

# Chargement de la librairie ggplot2
library(ggplot2)

# Création d'un data.frame contenant les coordonnées de la courbe de densité de l'âge des mères
df_dens_agedam <- as.data.frame(cbind(x = dens_agedam$x, y = dens_agedam$y))

# Création et affichage de l'histogramme de l'âge des mères
(gg_hist_agedam <- ggplot(data = dfvaris_litter, aes(x = agedam)) + 
    ggtitle("Distribution de l'âge des mères") + 
    xlab("Age de la mère en années") + ylab("Densité") +
    geom_histogram(alpha = 0.4, breaks = h_agedam$breaks, aes(y = ..density..), colour = "black") +
    geom_vline(xintercept = mean(dfvaris_litter$agedam), colour = "red") +
    geom_density(alpha = 0.2) +
    geom_ribbon(data = subset(df_dens_agedam, x <= qrtle1), aes(x = x, ymax = y), ymin = 0, fill = "red", alpha = 0.3) +
    geom_ribbon(data = subset(df_dens_agedam, x >= qrtle3), aes(x = x, ymax = y), ymin = 0, fill = "red", alpha = 0.3)
)

# Distribution de l’âge des mères et des pères en fonction de l'espèce (voir onglet B du chapitre 3.2)

# Chargement des librairies ggplot2 et gridExtra
library(ggplot2)
library(gridExtra)
## 
## Attachement du package : 'gridExtra'
## L'objet suivant est masqué depuis 'package:dplyr':
## 
##     combine
# Préparation d'une liste qui contiendra les graphiques à afficher
gg_hist_age_spe <- list()

# Création de l'histogramme de l'âge des mères pour les deux espèces
gg_hist_age_spe[[1]] <- ggplot(data = dfvaris_litter, aes(x = agedam)) + 
  ggtitle("") + xlab("Age de la mère en années") + ylab("Densité") +
  geom_histogram(alpha = 0.4, aes(y = ..density.., fill = species), bins = 15, color = "grey30") +
  geom_density(alpha = 0.2) +
  scale_fill_manual(values = c("#69b3a2", "#404080")) +
  facet_wrap(~ species) +
  theme(legend.position = "none")

# Création de l'histogramme de l'âge des pères pour les deux espèces
gg_hist_age_spe[[2]] <- ggplot(data = dfvaris_litter, aes(x = agesire)) + 
  ggtitle("") + xlab("Age du père en années") + ylab("Densité") +
  geom_histogram(alpha = 0.4, aes(y = ..density.., fill = species), bins = 10, color = "grey30") +
  geom_density(alpha = 0.2) +
  scale_fill_manual(values = c("#69b3a2", "#404080")) +
  facet_wrap(~ species) +
  theme(legend.position = "none")

# Organisation et affichage des quatre graphiques
do.call(grid.arrange, c(gg_hist_age_spe, nrow = 2))

# Distribution de la taille des portées en fonction de l'espèce (voir onglet C du chapitre 3.2)

# Chargement des librairies ggplot2 et gridExtra
library(ggplot2)

# Création du boxplot de la taille des portées en fonction de l'espèce
(gg_bxplt_ls_spe <- ggplot(dfvaris_litter, aes(x = species, y = littersizebirth)) + 
   xlab("") + ylab("Taille de la portée") +
   geom_boxplot(fill = c("#69b3a2", "#404080")))

# Création du 'violin plot' de la taille des portées en fonction de l'espèce
(gg_violin_ls_spe <- ggplot(dfvaris_litter, aes(x = species, y = littersizebirth, fill = species)) + 
    xlab("") + ylab("Taille de la portée") +
    geom_violin(alpha = 0.2) +
    scale_fill_manual(values = c("#69b3a2", "#404080")))

# Création du boxplot (avec les points) de la taille des portées en fonction de l'espèce
(gg_jitter_ls_spe <- ggplot(dfvaris_litter, aes(x = species, y = littersizebirth)) + 
    xlab("") + ylab("Taille de la portée") +
    geom_boxplot(fill = c("#69b3a2", "#404080"), alpha = 0.2) + 
    geom_jitter(color = "black", size = 0.4, alpha = 0.9))

library(ggplot2)
(rel_plot <- ggplot(dfvaris_litter, aes(x = agedam, y = agesire, shape = species)) +
  # geom_point(data = meansire, mapping = aes(x = agedam, y = agemeansire), shape = c(rep(17, sum(meansire$species == "Vrubra")), rep(16, sum(meansire$species == "Vvariegata")))) +
  xlab("Age de la mère (années)") +
  ylab("Age du père (années)") +
  scale_shape_manual(values = c(2, 1),
                     labels = c("V. rubra", "V. variegata")) +
  ggtitle("Rélation entre l'âge du père et l'âge de la mère chez les varis: ",
          subtitle = "les femmes les plus âgées sont généralement associées avec des males plus \njeune qu'elles") +
  theme(legend.justification = c(1, 1), 
        legend.position = c(1, 1), 
        legend.title = element_blank(), 
        plot.subtitle = element_text(size = 10)) +
    geom_point()
  )

# Relation entre l'âge du père et l'âge de la mère chez deux espèces de varis
# Attention : certains éléments graphiques du ggplot initial ne sont pas conservés par ggplotly (cf le sous-titre qui a disparu).

library(plotly)
## 
## Attachement du package : 'plotly'
## L'objet suivant est masqué depuis 'package:ggplot2':
## 
##     last_plot
## L'objet suivant est masqué depuis 'package:stats':
## 
##     filter
## L'objet suivant est masqué depuis 'package:graphics':
## 
##     layout
## 
## Attachement du package : 'plotly'
## L'objet suivant est masqué depuis 'package:ggplot2':
## 
##     last_plot
## L'objet suivant est masqué depuis 'package:stats':
## 
##     filter
## L'objet suivant est masqué depuis 'package:graphics':
## 
##     layout
ggplotly(rel_plot)